<?php 

/**
 * [会员管理模型
 * 建立此模型就是为了处理任何与表有关的逻辑处理，一张表对应一个模型，外部控制器调用方式为：
 * K('模型名称')->模型中的某个方法，例如：K('User')->get_data()
 * 这里K()里面并不是表名，而是要操作的UserModel模型的模型名称，表名是通过$table来设置的。]
 */
class UserModel extends Model{

	// 指定要操作的表名
	public $table = 'user';

	// 自动验证，语法为array(' 表单字段名',' 验证方法',' 错误信息',' 验证条件',' 验证时机')
	public $validate = array(
		array('username','nonull','用户名不能为空',2,1),
		array('username','user:5,20','用户名必须以字母开头，长度5-20位',2,1),
		array('usermail','nonull','邮箱地址不能为空',1,1),
		array('usermail','email','邮箱地址不合法，请重新输入',1,1),
		array('password','nonull','密码不能为空',1,1),
		array('password','minlen:6','密码长度最少为6位',1,1),
		array('passwordc','confirm:password','两次密码输入必须一致',1,1),
		array('deal','regexp:/^1$/','必须同意协议才能完成注册',2,1)
		);

	// 自动完成，语法为array(' 数据字段名',' 处理方法',' 方法类型',' 验证条件',' 处理时机')
	public $auto = array(
		array('password','_md5','method',2,1),
		array('registertime','_regtime','method',2,1),
		array('rid','_rid','method',2,1),
		array('logintime','_logintime','method',2,1),
		array('loginip','_loginip','method',2,1)
		);

	/**
	 * ]注册用户方法]
	 */
	public function add_user(){
		// 执行添加动作，该方法是从Model类中来进行添加的, 并返出自增ID，用作前台存入session内
		return $this->add();
	}

	//*****************************自动完成******************************************
	/**
	 * [自动完成-用户提交过来的密码字段进行MD5加密处理]
	 */
	public function _md5($con){
		// 放出处理后的密码
		return md5($con);
	}

	/**
	 * [自动完成-用户注册时的时间戳]
	 */
	public function _regtime(){
		return time();
	}

	/**
	 * [自动完成-识别用户的角色，是企业还是个人]
	 */
	public function _rid(){
		// Q函数，语法：Q('要处理的变量', '当变量不存在时的默认值' , '过滤处理的函数')
		// Q('post.type') 获得post提交的rid数据
		$rid = Q('post.rid', 0 , 'intval');
		// 这里是判断是否为个人用户注册
		if($rid == 1){
			return 1;
		}
		// 只要不是1，默认就为企业用户注册，因为前台html页面中如果$_GET['type']参数不存在时，就为企业注册页面
		return 2;
	}

	/**
	 * [自动完成-用户登陆时间戳]
	 */
	public function _logintime(){
		return time();
	}

	/**
	 * [自动完成-获得客户端ip]
	 */
	public function _loginip(){
		// 获得客户端ip地址
		return Ip::getClientIp();
	}
	//**************************************************************************

	public function validate_login(){

		// 获得用户提交的用户名
		$username = Q('post.username');
		
		// 根据用户提交的用户名，提取出用户的信息
		$userInfo = $this->where(array('username' => $username))->find();

		// 判断用户是否存在
		if(!$userInfo){
			// 把错误提示信息压入到模型里的$this->error中
			$this->error = '用户名不存在';
			return false;
		}

		// 获得用户输入的密码，并验证密码是否正确
		$password = Q('post.password',null,'md5');
		if($userInfo['password'] != $password){
			$this->error = '密码不正确';
			return false;
		}

		// 判断用户状态是否为锁定
		if($userInfo['lock'] == 1){
			$this->error = '用户已锁定，请联系管理员';
			return false;
		}

		// 返出用户的信息数组给到控制器，方便控制器来设置session做一周登陆
		return $userInfo;
	}


	/**
	 * 【更新登录信息】
	 */
	public function update_login(){
		$updata = array(
			'logintime' => time(),
			'loginip'	=> Ip::getClientIp()
			);

		$this->where(array('uid' => session('uid')))->save($updata);
	}


	/**
	 * [密码修改]
	 */
	public function update_password(){
		// 获得第一个新密码框的输入，判断新密码不得少于6位
		$password1 = Q('post.password1');
		if(strlen($password1) < 6){
			$this->error = '密码长度不能少于6位';
			return false;
		}

		// 获得第二个新密码框的输入，判断两次新密码输入是否一致
		$password2 = Q('post.password2');
		if($password2 != $password1){
			$this->error = '两次密码不相同';
			return false;
		}

		// 获得旧密码输入框的内容
		$oldpwd = Q('post.oldpwd', '','md5');
		// 调取数据库该用户的密码
		$dbpwd = $this->where(array('uid'=>session('uid')))->getField('password');
		if($oldpwd != $dbpwd){
			$this->error = '密码错误';
			return false;
		}

		// 执行修改
		$this->where(array('uid'=>session('uid')))->save(array('password'=>md5($password1)));

		return true;
	}


	/**
	 * [获得用户个人资料]
	 */
	public function get_info($field = NULL){
		// 如果字段field为空，就按照where条件正常查询
		if(is_null($field)){
			return $this->field($field)->where(array('user_uid'=>session('uid')))->find();
		}

		// 指定字段
		$facePath = $this->field($field)->where(array('user_uid'=>session('uid')))->find();
		// 如果用户没上传图像，或者没有个人资料，就显示默认图片，组合默认图片的路径
		if(!$facePath || !$facePath['face']){
			return array(
				'face'	=>	__TPL__ . '/Public/Images/no_photo.gif'
				);
		}
		// 组合用户上传图像的路径
		$facePath['face'] = __ROOT__ . '/' . $facePath['face'];
		// 返出新头像路径
		return $facePath;
	}


}
 ?>